package com.yanqu.road.server.manger.config.grandchild.talent.enums;

import com.yanqu.road.server.manger.config.grandchild.talent.entity.TalentTriggerParam;
import com.yanqu.road.server.manger.config.grandchild.talent.entity.TalentTriggerResult;
import com.yanqu.road.server.manger.config.grandchild.talent.trigger.ITalentTrigger;
import com.yanqu.road.server.manger.config.grandchild.talent.trigger.*;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 前提随机条件
 */
public enum eGrandChildTalentTrigger {

    NOCOND("NOCOND", new TalentTriggerNOCOND()), // 【无条件】

    TAT("TAT", new TalentTriggerTAT()), // 每有一项天资尾数 ? 数值
    TMX("TMX", new TalentTriggerTMX()), // 最高天资 ? 数值
    TMN("TMN", new TalentTriggerTMN()), // 最低天资 ? 数值
    TGG("TGG", new TalentTriggerTGG()), // 每有一项天资 ? 数值
    TOM("TOM", new TalentTriggerTOM()), // 最高天资 ? 职业ID
    TQN("TQN", new TalentTriggerTQN()), // 最高天资 ? 职业ID
    TTQ("TTQ", new TalentTriggerTTQ()), // 最高天资 ? 职业ID
    TOO("TOO", new TalentTriggerTOO()), // 这也为 xx

    ;

    private static Map<String, eGrandChildTalentTrigger> cacheMap = new ConcurrentHashMap<>();

    static {
        for (eGrandChildTalentTrigger value : values()) {
            cacheMap.put(value.name, value);
        }
    }

    private String name;
    private ITalentTrigger trigger;

    eGrandChildTalentTrigger(String name, ITalentTrigger trigger) {
        this.name = name;
        this.trigger = trigger;
    }

    public static TalentTriggerResult getResult(TalentTriggerParam param) {
        eGrandChildTalentTrigger talentTrigger = cacheMap.get(param.getCondition().getName());
        return talentTrigger.trigger.getResult(param);
    }

}
